package mybox.engine;

import java.io.IOException;
import java.util.ArrayList;

public class GUI_Interface {
	
	public static void drawStandardBox(
			String fileStr,
			String materialDickeStr,
			String zinkungsLaengeStr,
			String laserBreiteStr,
			String laengeStr,
			String breiteStr,
			String hoeheStr
			) throws SecurityException, IOException {
		
			File4Qcad file4qcad = new File4Qcad(fileStr);	
			double materialDicke = Double.parseDouble(materialDickeStr);
			double zinkungsFaktor= Double.parseDouble(zinkungsLaengeStr)/materialDicke;
			
			double laserBreite = Double.parseDouble(laserBreiteStr);
			double laenge = Double.parseDouble(laengeStr);
			double breite = Double.parseDouble(breiteStr);
			double hoehe = Double.parseDouble(hoeheStr);
			
			Schachtel schachtel = new Schachtel(file4qcad, new QVector(0,0), laenge,breite,hoehe,materialDicke,zinkungsFaktor,laserBreite);
			schachtel.draw();
			file4qcad.close();
	}
	
	public static void drawRecursiveBox(
			String fileStr,
			String materialDickeStr,
			String zinkungsLaengeStr,
			String laserBreiteStr,
			String laengeStr,
			String breiteStr,
			String hoeheStr,
			String anzSchachtelnStr,
			String stossLochDurchmesserStr
			) throws SecurityException, IOException {
		
			File4Qcad file4qcad = new File4Qcad(fileStr);	
			double materialDicke = Double.parseDouble(materialDickeStr);
			double zinkungsFaktor= Double.parseDouble(zinkungsLaengeStr)/materialDicke;
			double laserBreite = Double.parseDouble(laserBreiteStr);
			double initLaenge = Double.parseDouble(laengeStr);
			double initBreite = Double.parseDouble(breiteStr);
			double initHoehe = Double.parseDouble(hoeheStr);
			int anzSchachteln=Integer.parseInt(anzSchachtelnStr);
			double stossLochRadius = Double.parseDouble(stossLochDurchmesserStr)/2;
	
			ArrayList<Schachtel> schachtelArr = new ArrayList<Schachtel>();
			double nachUntenRutschen=0;
			for (int schachtIdx=0;schachtIdx<anzSchachteln;schachtIdx++) {
				if (schachtIdx==0) {
					schachtelArr.add(new Schachtel(file4qcad, new QVector(0,0), 
					initLaenge,initBreite,initHoehe,
					materialDicke,zinkungsFaktor,laserBreite, 
					Schachtel.isLade));
					schachtelArr.get(schachtIdx).draw();
				}
				else {
					Schachtel prevSchachtel = schachtelArr.get(schachtIdx-1);
					nachUntenRutschen += 
						4*materialDicke+prevSchachtel.breite+java.lang.Math.max(prevSchachtel.hoehe, prevSchachtel.breite);
					schachtelArr.add(new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
							prevSchachtel.hoehe+materialDicke,
							prevSchachtel.breite+2*materialDicke,
							prevSchachtel.laenge+materialDicke,
							materialDicke,zinkungsFaktor, laserBreite, 
							Schachtel.isLade));
					new Circle(file4qcad, schachtelArr.get(schachtIdx).grundPlatte1.center,stossLochRadius).draw();
					schachtelArr.get(schachtIdx).draw();			 	
				}
			}	
			file4qcad.close();
		}
	
	public static void drawBoxWithRaisedFloor(
			String fileStr,
			String materialDickeStr,
			String zinkungsLaengeStr,
			String laserBreiteStr,
			String laengeStr,
			String breiteStr,
			String hoeheStr,
			String bodenHoeheStr
			) throws SecurityException, IOException {
		
			File4Qcad file4qcad = new File4Qcad(fileStr);
			QVector aktPos = new QVector(0,0);
			double materialDicke = Double.parseDouble(materialDickeStr);
			double zinkungsFaktor= Double.parseDouble(zinkungsLaengeStr)/materialDicke;
			double laserBreite = Double.parseDouble(laserBreiteStr);
			double laenge = Double.parseDouble(laengeStr);
			double breite = Double.parseDouble(breiteStr);
			double hoehe = Double.parseDouble(hoeheStr);
			double bodenHoehe=Double.parseDouble(bodenHoeheStr);
	
			SchachtelMitBoden schachtelMitBoden = 
					new SchachtelMitBoden(
							file4qcad, aktPos,
							laenge, breite, hoehe, 
							bodenHoehe, materialDicke,zinkungsFaktor,
							laserBreite);
			schachtelMitBoden.draw();	
			file4qcad.close();
	}
	
	public static void drawSerialBox(
			String fileStr,
			String materialDickeStr,
			String zinkungsLaengeStr,
			String laserBreiteStr,
			String laengeStr,
			String breiteStr,
			String hoeheStr,
			String anzSchachtelnStr,
			String stossLochRadiusStr) throws SecurityException, IOException {
		
			File4Qcad file4qcad = new File4Qcad(fileStr);
			double materialDicke = Double.parseDouble(materialDickeStr);
			double zinkungsFaktor= Double.parseDouble(zinkungsLaengeStr)/materialDicke;
			double laserBreite = Double.parseDouble(laserBreiteStr);
			double initLaenge = Double.parseDouble(laengeStr);
			double initBreite = Double.parseDouble(breiteStr);
			double initHoehe = Double.parseDouble(hoeheStr);								
			int anzInnerSchachteln=Integer.parseInt(anzSchachtelnStr);
			double stossLochRadius=Double.parseDouble(stossLochRadiusStr);;
		
			ArrayList<Schachtel> schachtelArr = new ArrayList<Schachtel>();
			double nachUntenRutschen=0;
		
			for (int schachtIdx=0;schachtIdx<anzInnerSchachteln;schachtIdx++) {
			
				nachUntenRutschen += 
					4*materialDicke+initBreite+java.lang.Math.max(initHoehe, initBreite);
			
				schachtelArr.add(new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
						initLaenge,initBreite,initHoehe,
						materialDicke,zinkungsFaktor,laserBreite, 
						Schachtel.isLade));
				schachtelArr.get(schachtIdx).draw();				
			}
		
			double motherLaenge=initLaenge*anzInnerSchachteln+2*materialDicke;
			double motherBreite=initHoehe+2*materialDicke;
			double motherHoehe=initBreite+materialDicke;		
			nachUntenRutschen += 
				4*materialDicke+motherBreite+java.lang.Math.max(motherHoehe, motherBreite);
		
		
			Schachtel mutterSchachtel = new Schachtel(file4qcad, new QVector(0,-nachUntenRutschen), 
					motherLaenge,
					motherBreite,
					motherHoehe,
					materialDicke,zinkungsFaktor,laserBreite, 
					Schachtel.isLade);
			mutterSchachtel.draw();
		
			Schachtel einsLade = schachtelArr.get(0);
		
			QVector ecke2Center = QVector.diff(einsLade.laengenPlatte1.center, einsLade.laengenPlatte1.ecke[0]);		
			QVector firstEcke = new QVector(mutterSchachtel.grundPlatte1.ecke[0].x+materialDicke,mutterSchachtel.grundPlatte1.ecke[0].y+materialDicke);		
		
			QVector firstCenter = QVector.add(firstEcke, ecke2Center);
			firstCenter.y=mutterSchachtel.grundPlatte1.center.y;
		
			Circle lastCircle = new Circle(file4qcad, firstCenter,stossLochRadius);
			lastCircle.draw();
			QVector toNextCircle = new QVector(initLaenge,0);
        		
		
			for (int schachtIdx=1;schachtIdx<anzInnerSchachteln;schachtIdx++) {			
				Circle aktCircle = new Circle(file4qcad, QVector.add(lastCircle.center, toNextCircle),stossLochRadius);			
				aktCircle.draw();
				lastCircle = aktCircle;
			}	
			file4qcad.close();		
	}

}
